//
//  CircleLayout.m
//  预习UICollectionView
//
//  Created by dllo on 16/7/24.
//  Copyright © 2016年 YMJ. All rights reserved.
//

#import "CircleLayout.h"

@implementation CircleLayout
// 确保能试试跟新布局
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
    return YES;
}
// 进行圆形布局,设置其每个元素的相关因素(主要是它的frame 和中心点)
- (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    // 创建可变数组,用于储存所有的布局因素
    NSMutableArray *layoutAtts = [NSMutableArray array];
    // 取出对应布局中的collectView 的元素的数目(为的就是给一个个cell独立设置其的布局)
    NSInteger count = [self.collectionView numberOfItemsInSection:0];
    // 设置每个cell 的高度和宽度
    CGFloat WH = 100;
    // 取出圆形视图的中心点(也就是collectionView 的中心点)
    CGFloat centerX = self.collectionView.frame.size.width * 0.5;
    CGFloat centerY = self.collectionView.frame.size.height * 0.5;
    // 设置 圆形布局半径
    CGFloat randius = centerY - 30;
    // 获得每个cell的间距(所有cell平分整个圆)
    CGFloat angelMargin = M_PI * 2 / count;
    // 遍历进行设置布局
    for (int i = 0; i < count; i++) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
        // 创建对应索引的布局
        UICollectionViewLayoutAttributes *layoutAtt = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
        // 根据三角函数设置布局的中心点
        CGFloat a = sin(i * angelMargin) *randius;
        CGFloat b = cos(i * angelMargin) *randius;
        layoutAtt.center = CGPointMake(centerX + a, centerY + b);
        layoutAtt.size = CGSizeMake(WH, WH);
        [layoutAtts addObject:layoutAtt];
        
    }
    return layoutAtts;
}
@end
